/**
 * 后台服务管理器 - 处理真机后台运行
 */
class BackgroundService {
  constructor() {
    this.isRunning = false;
    this.wakeLock = null;
    this.notificationId = 1001;
  }

  // 启动后台服务
  async startBackgroundService() {
    console.log('🚀 启动后台服务...');
    
    // #ifdef APP-PLUS
    try {
      // 1. 请求忽略电池优化
      this.requestBatteryOptimization();
      
      // 2. 创建前台服务通知
      this.createForegroundNotification();
      
      // 3. 保持屏幕唤醒锁（可选）
      this.acquireWakeLock();
      
      // 4. 设置应用保活
      this.setupAppKeepAlive();
      
      this.isRunning = true;
      console.log('✅ 后台服务启动成功');
      
      return true;
    } catch (error) {
      console.error('❌ 后台服务启动失败:', error);
      return false;
    }
    // #endif
    
    // #ifdef H5
    // H5环境尝试保持页面活跃
    this.keepPageActive();
    this.isRunning = true;
    return true;
    // #endif
  }

  // 停止后台服务
  stopBackgroundService() {
    console.log('🛑 停止后台服务...');
    
    // #ifdef APP-PLUS
    try {
      // 释放唤醒锁
      this.releaseWakeLock();
      
      // 取消前台服务通知
      this.cancelForegroundNotification();
      
      this.isRunning = false;
      console.log('✅ 后台服务已停止');
    } catch (error) {
      console.error('❌ 停止后台服务失败:', error);
    }
    // #endif
    
    // #ifdef H5
    this.isRunning = false;
    // #endif
  }

  // 请求电池优化白名单
  requestBatteryOptimization() {
    // #ifdef APP-PLUS
    try {
      const main = plus.android.runtimeMainActivity();
      const Intent = plus.android.importClass("android.content.Intent");
      const Settings = plus.android.importClass("android.provider.Settings");
      const Uri = plus.android.importClass("android.net.Uri");
      
      // 检查是否已在白名单中
      const PowerManager = plus.android.importClass("android.os.PowerManager");
      const Context = plus.android.importClass("android.content.Context");
      const powerManager = main.getSystemService(Context.POWER_SERVICE);
      
      if (powerManager.isIgnoringBatteryOptimizations && 
          !powerManager.isIgnoringBatteryOptimizations(main.getPackageName())) {
        
        // 请求加入白名单
        const intent = new Intent();
        intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
        intent.setData(Uri.parse("package:" + main.getPackageName()));
        main.startActivity(intent);
        
        console.log('📱 已请求电池优化白名单');
      } else {
        console.log('✅ 已在电池优化白名单中');
      }
    } catch (error) {
      console.error('请求电池优化失败:', error);
    }
    // #endif
  }

  // 创建前台服务通知
  createForegroundNotification() {
    // #ifdef APP-PLUS
    try {
      const options = {
        cover: false,
        title: "闹钟服务运行中",
        content: "闹钟正在后台监控中，确保按时提醒",
        payload: {
          type: "foreground_service"
        }
      };
      
      // 创建持久通知
      plus.push.createMessage(options.content, JSON.stringify(options.payload), options);
      
      console.log('🔔 前台服务通知已创建');
    } catch (error) {
      console.error('创建前台服务通知失败:', error);
    }
    // #endif
  }

  // 取消前台服务通知
  cancelForegroundNotification() {
    // #ifdef APP-PLUS
    try {
      plus.push.clear();
      console.log('🔕 前台服务通知已取消');
    } catch (error) {
      console.error('取消前台服务通知失败:', error);
    }
    // #endif
  }

  // 获取唤醒锁
  acquireWakeLock() {
    // #ifdef APP-PLUS
    try {
      const main = plus.android.runtimeMainActivity();
      const Context = plus.android.importClass("android.content.Context");
      const PowerManager = plus.android.importClass("android.os.PowerManager");
      
      const powerManager = main.getSystemService(Context.POWER_SERVICE);
      this.wakeLock = powerManager.newWakeLock(
        PowerManager.PARTIAL_WAKE_LOCK, 
        "AlarmClock:WakeLock"
      );
      
      if (this.wakeLock && !this.wakeLock.isHeld()) {
        this.wakeLock.acquire();
        console.log('🔋 唤醒锁已获取');
      }
    } catch (error) {
      console.error('获取唤醒锁失败:', error);
    }
    // #endif
  }

  // 释放唤醒锁
  releaseWakeLock() {
    // #ifdef APP-PLUS
    try {
      if (this.wakeLock && this.wakeLock.isHeld()) {
        this.wakeLock.release();
        this.wakeLock = null;
        console.log('🔋 唤醒锁已释放');
      }
    } catch (error) {
      console.error('释放唤醒锁失败:', error);
    }
    // #endif
  }

  // 设置应用保活
  setupAppKeepAlive() {
    // #ifdef APP-PLUS
    try {
      // 监听应用生命周期
      plus.globalEvent.addEventListener('pause', () => {
        console.log('📱 应用进入后台，保持服务运行');
        // 应用暂停时的处理
      });
      
      plus.globalEvent.addEventListener('resume', () => {
        console.log('📱 应用恢复前台');
        // 应用恢复时的处理
      });
      
      // 设置应用为系统级应用（需要root权限，一般不可用）
      // 这里主要是通过前台服务和电池优化白名单来保活
      
      console.log('🛡️ 应用保活设置完成');
    } catch (error) {
      console.error('设置应用保活失败:', error);
    }
    // #endif
  }

  // H5环境保持页面活跃
  keepPageActive() {
    // #ifdef H5
    try {
      // 防止页面休眠
      if ('wakeLock' in navigator) {
        navigator.wakeLock.request('screen').then(wakeLock => {
          this.wakeLock = wakeLock;
          console.log('🌐 H5唤醒锁已获取');
        }).catch(error => {
          console.warn('H5唤醒锁获取失败:', error);
        });
      }
      
      // 定期发送心跳，防止页面被回收
      setInterval(() => {
        if (this.isRunning) {
          console.log('💓 H5心跳检测');
        }
      }, 30000); // 每30秒一次心跳
      
    } catch (error) {
      console.error('H5保活设置失败:', error);
    }
    // #endif
  }

  // 检查后台权限
  checkBackgroundPermissions() {
    // #ifdef APP-PLUS
    try {
      const main = plus.android.runtimeMainActivity();
      const Context = plus.android.importClass("android.content.Context");
      const PowerManager = plus.android.importClass("android.os.PowerManager");
      
      const powerManager = main.getSystemService(Context.POWER_SERVICE);
      const isIgnoringBatteryOptimizations = powerManager.isIgnoringBatteryOptimizations && 
        powerManager.isIgnoringBatteryOptimizations(main.getPackageName());
      
      return {
        batteryOptimization: isIgnoringBatteryOptimizations,
        notification: true // 假设通知权限已授予
      };
    } catch (error) {
      console.error('检查后台权限失败:', error);
      return {
        batteryOptimization: false,
        notification: false
      };
    }
    // #endif
    
    // #ifdef H5
    return {
      batteryOptimization: true,
      notification: 'Notification' in window
    };
    // #endif
  }

  // 显示权限引导
  showPermissionGuide() {
    const permissions = this.checkBackgroundPermissions();
    
    let message = '为确保闹钟能在后台正常工作，请进行以下设置：\n\n';
    
    if (!permissions.batteryOptimization) {
      message += '1. 将应用加入电池优化白名单\n';
    }
    
    if (!permissions.notification) {
      message += '2. 允许应用发送通知\n';
    }
    
    message += '\n建议在系统设置中：\n';
    message += '• 关闭应用的电池优化\n';
    message += '• 允许应用自启动\n';
    message += '• 允许应用在后台运行\n';
    message += '• 锁定应用在最近任务中';
    
    uni.showModal({
      title: '后台运行权限设置',
      content: message,
      confirmText: '我知道了',
      showCancel: false
    });
  }
}

// 创建全局实例
const backgroundService = new BackgroundService();

export default backgroundService;